/*
 * p1756.cpp
 *
 *  Created on: 2013-3-18
 *      Author: zy
 */
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
const double INF=1e9;
int sig(double d) {
	return fabs(d) < 1E-6 ? 0 : d < 0 ? -1 : 1;
}
struct Point{
	double x, y;
	double k;
	Point(){}
	Point(double x, double y): x(x), y(y) {}
	void set(double x, double y) {
		this->x = x;
		this->y = y;
	}
	double mod(){//模
		return sqrt(x*x+y*y);
	}
	double mod_pow(){//模的平方
		return x*x + y*y;
	}
	void output() {
		printf("x = %f, y = %f\n", x, y);
	}
	bool operator < (const Point &p) const {
		return sig(x-p.x) != 0 ? x < p.x : sig(y-p.y) < 0;
	}
};
double cross(Point o, Point a, Point b) {
	return (a.x - o.x)*(b.y - o.y)-(b.x - o.x)*(a.y - o.y);
}
double dot(Point &o, Point &a, Point &b) {
	return (a.x-o.x)*(b.x-o.x) + (a.y-o.y)*(b.y-o.y);
}
int btw(Point &x, Point &a, Point &b) {
	return sig(dot(x, a, b));
}
bool onSeg(Point o, Point a, Point b) {
	return sig(cross(o,a,b))==0 && btw(o,a,b)!=1;
}
/**
 * 判断点p是否在任意多边形ps中
 * 0外，壹内，2边上
 */
int inPolygon(Point * ps, int n, Point p) {
	int cnt = 0;
	ps[n] = ps[0];
	for(int i = 0; i < n; i ++) {
		if(onSeg(p, ps[i], ps[i+1]))	return 2;
		int k = sig( cross(ps[i], ps[i+1], p) );
		int d1 = sig( ps[i+0].y-p.y );
		int d2 = sig( ps[i+1].y-p.y );
		if(k>0 && d1<=0 && d2>0)	cnt ++;
		if(k<0 && d2<=0 && d1>0)	cnt --;
	}
	return cnt != 0;
}
int main()
{
	int n;
	Point p[110];
	while(scanf("%d",&n)!=EOF)
	{
		for(int i=0;i<n;i++)
			scanf("%lf%lf",&p[i].x,&p[i].y);
		int m;Point tem;
		scanf("%d",&m);
		for(int i=1;i<=m;i++)
		{
			scanf("%lf%lf",&tem.x,&tem.y);
			if(inPolygon(p,n,tem)==1)printf("Yes\n");
			else printf("No\n");
		}
	}
	return 0;
}
